/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package multithread;

import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.*;

/**
 *
 * @author NDA
 */
public class ChuKho implements Runnable {

    private int[] a = new int[4];
    private int min;
    public BlockingQueue<String> kho = null;
    private CongNhan temp;
    private Key tempKey, key;
    private ConcurrentHashMap<Key, CongNhan> congNhanHashMap = new ConcurrentHashMap<Key, CongNhan>(4);
    private Collection<Key> keyColl;

    public ChuKho(BlockingQueue<String> kho) throws InterruptedException {
        this.kho = kho;
        temp = new CongNhan();
        congNhanHashMap.put(new Key("Cong nhan 1"), temp);
        temp = new CongNhan();
        congNhanHashMap.put(new Key("Cong nhan 2"), temp);
        temp = new CongNhan();
        congNhanHashMap.put(new Key("Cong nhan 3"), temp);
        temp = new CongNhan();
        congNhanHashMap.put(new Key("Cong nhan 4"), temp);
    }

    @Override
    public synchronized void run() {


        while (true) {
//            temp = cn.peek();
            int i;
            i = 0;
            if (!kho.isEmpty()) {
                System.out.println("            Chủ kho và công nhân");
                System.out.println("Chủ kho: Các chú công nhân "
                        + "lần lượt chuyển hàng vào kho đi!");
                keyColl = congNhanHashMap.keySet();
                Iterator it = keyColl.iterator();
                while (it.hasNext()) {
                    tempKey = (Key) it.next();
                    a[i] = tempKey.getKey();
                    i++;
                }

                min = a[0];
                for (i = 0; i < a.length; i++) {
                    if (a[i] < min) {
                        min = a[i];
                    }
                }
                Iterator it1 = keyColl.iterator();
                while (it1.hasNext()) {
                    tempKey = (Key) it1.next();
                    if (min == tempKey.getKey()) {
                        key = tempKey;

                        temp = congNhanHashMap.get(key);
                        if (temp.getDone()) {
                            temp.resume();
                            kho.poll();
                            temp.pause();
                            congNhanHashMap.remove(key, temp);
                            key.increaseKey();
                            congNhanHashMap.put(key, temp);
                            break;
                        }
                    }
                }
                System.out.println("Chủ kho: Trong kho hiện tại có: " + kho.size() + " kiện hàng");
            }
        }
    }
}
